package com.zzx.common;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import com.zaxxer.hikari.HikariDataSource;


@Configuration
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public class DataSourceProperties {

	



	@Value("${spring.datasource.hikari.minimum-idle}")
	private int minimumIdle;

	@Value("${spring.datasource.hikari.idle-timeout}")
    private int idleTimeout;
    
    @Value("${spring.datasource.hikari.maximum-pool-size}")
    private int maximumPoolSize;
    
    @Value("${spring.datasource.hikari.pool-name}")
    private String  poolName;
    
    @Value("${spring.datasource.hikari.auto-commit}")
    private boolean autoCommit;
    
    @Value("${spring.datasource.hikari.connection-timeout}")
    private int connectionTimeout;
    
    @Value("${spring.datasource.hikari.max-lifetime}")
    private int maxLifetime;
    
    @Value("${spring.datasource.hikari.connection-test-query}")
    private String connectionTestQuery;


    public HikariDataSource setDataSource(HikariDataSource datasource) {    	
    	datasource.setMinimumIdle(minimumIdle);
    	//空闲连接存活最大时间，默认600000（10分钟）
    	datasource.setIdleTimeout(idleTimeout);
    	// # 连接池最大连接数，默认是10
    	datasource.setMaximumPoolSize(maximumPoolSize);
    	//此属性控制从池返回的连接的默认自动提交行为,默认值：true
    	datasource.setAutoCommit(autoCommit);
    	datasource.setPoolName(poolName);
    	/**
         * 用来检测连接是否有效的sql，要求是一个查询语句，常用select 'x'。如果validationQuery为null，testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
         */
    	datasource.setConnectionTestQuery(connectionTestQuery);
    	//# 数据库连接超时时间,默认30秒，即30000
    	datasource.setConnectionTimeout(connectionTimeout);        
        //# 此属性控制池中连接的最长生命周期，值0表示无限生命周期，默认1800000即30分钟
        datasource.setMaxLifetime(maxLifetime);
   
        return datasource;
    }
    
}
